home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tiger Disk 6
/
Tiger_Disk_006_19xx_Tiger-Crew-Disk_de_Side_B.d64
/
11 mk
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2023-02-26
|
7KB
|
179 lines
8 clr
10 u$="[197][197][197][197][197][197][197][197][197][197]":o$="[164][164][164][164][164][164][164][164][164]":i$="input-routine":b$=" bildschirm"
100 rem beispiel 1
101 data 162,0,32,207,255,157,0,128,232,201,13,208,245,96
108 rem beispiel 2
109 data 32,207,255,170,169,13,32,210,255,224,74,240,4,224,78,208,239,96
114 rem aufgabe 3
115 data 162,0,32,207,255,201,32,240,249,157,0,128,232,201,13,208,241,96
200 print"[147][164][164][164]";o$;o$;o$;o$:print"syntax-lehrgang 'maschinensprache' (11)
210 [153]"totototo";o$;o$;o$:[153]"2.2. eingabe ueber die tastatur
220 print"nachdem wir in den beiden letzten lehr-
230 [153]"gaengen etwas ueber die ausgabe von
240 print"daten auf dem"b$" gelernt haben,
250 [153]"sehen wir uns nun die eingabe von daten
260 print"ueber die tastatur an.
270 [153]"eine sehr einfache loesung bietet die
280 printi$" des betriebssystems. sie
290 [153]"hat die einsprungadresse $ffcf.
300 restore:fori=0to49:readx:poke912+i,x:next
310 i=1:gosub5000:ifflthen200
400 print"[147]die inputroutine wird mit 'jsr $ffcf'":printtab(28);u$
410 print"aufgerufen (dezimal: 65487).
420 [153]"ab dem einsprung in diese routine wer-
430 print"den von der tastatur zeichen angenommen
440 [153]"und auf dem"b$" hintereinander
450 print"ausgegeben. das laeuft genauso ab wie
460 [153]"beim basic-befehl 'input'.
520 i=2:gosub5000:ifflthen200
600 print"[147]der ruecksprung aus der "i$
605 print"erfolgt bei druecken der taste return.
606 [153]"im ac steht dabei das erste zeichen.
610 print"springt man die routine dann nochmals
615 [153]"an, so wird kein input ausgeloest, son-
620 print"dern es erfolgt ein sofortiger rueck-
630 [153]"sprung mit dem zweiten eingegebenen
640 print"zeichen im ac. die "i$" wird
650 [153]"nun immer wieder angesprungen. jedesmal
660 print"erfolgt sofort der ruecksprung mit dem
670 [153]"naechsten zeichen im ac.
720 i=3:gosub5000:ifflthen400
800 print"[147]wenn auf diese weise das letzte zeichen
805 [153]"(also das 'return') abgerufen wurde,be-
810 print"wirkt ein nochmaliges anspringen der
815 [153]i$" wieder einen input.
820 print"ebenso kann man das abrufen der einge-
830 [153]"gebenen zeichen unterbrechen, indem man
840 print"mit der printroutine ein 'return' aus-
850 [153]"gibt.
860 print"das erscheint anfangs kompliziert, ist
870 [153]"es aber nicht. sehen wir uns ein bei-
880 print"spiel an:
930 i[178]4:[141]5000:[139]fl[167]600
1000 [153]"loadbeispiel:":[153]u$
1010 [153]"mit der "i$" soll eine folge
1020 print"von zeichen ueber die tastatur eingege-
1030 [153]"ben werden.close die zeichen sollen nicht
1040 print"sofort weiterverarbeitet sondern zuerst
1050 [153]"zwischengespeichert werden. wir waehlen
1060 print"als zwischenspeicher die speicher $8000
1070 [153]"und folgende. da dort der"b$"-
1080 print"speicher liegt, sehen wir direkt den
1090 [153]"zeitlichen ablauf.
1130 i=5:gosub5000:ifflthen800
1200 print"[147]das programm:
1210 [153]" ldx #$00 zaehler initialisieren
1220 print" [176][192]jsr $ffcf aufruf der inputroutine
1240 [153]" (NULL)cmd(NULL) sta $8000,x nach $8000+x speichern
1250 print" [221][157][221] inx x=x+1
1260 [153]" (NULL)cmd(NULL) cmp #$0d (ac) = 'return' ?
1270 print" [221][157][173]_bne $f5 nein: naechstes zeichen
1275 [153]" in ac holen
1280 print" rts ja: ruecksprung
1290 [153]"nun eine demonstration:
1320 i=6:gosub5000:ifflthen1000
1400 print"[147] ";
1410 print" "
1415 print"[192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192]
1420 [153]"geben sie nun einige zeichen ein. dabei
1430 print"stehen ihnen auch die cursorsteuerungen
1440 [153]"'inst' und 'del' zur verfuegung.
1450 print""
1460 sys 912:rem beispiel 1
1465 forw=0to999:next
1470 print"":ifn7then1500
1475 print"da die eingabe in ascii,die ausgabe je-
1480 [153]"doch im"b$"code erfolgt, stimmen
1485 print"die eingegebenen und die ausgegebenen
1490 [153]"zeichen allerdings nicht ueberein. das
1495 print"soll uns hier nicht weiter stoeren.":n7=1:goto1530
1500 gosub10000
1515 ifx$="j"then1400
1530 i=7:gosub5000:ifflthen1200
1600 print"[147]beachten sie besonders folgendes:
1620 [153]"1. die ausgabe erfolgt erst, wenn die
1625 print" eingabe durch 'return' beendet ist.
1630 [153]"2. das letzte uebergebene zeichen ist
1635 print" immer ein 'return'. im "b$
1640 print" erscheint es als 'm' stets am ende
1650 [153]" der kette ausgegebener zeichen.
1660 print"3. die anzahl der zeichen ist auf 79
1670 [153]" begrenzt.
1680 print"blaettern sie zurueck und ueberzeugen
1685 [153]"sie sich!
1710 i=8:gosub5000:ifflthen1400
1800 print"[147]oft werden die eingegebenen zeichen gar
1810 [153]"nicht zwischengespeichert, sondern so-
1820 print"fort bearbeitet.
1830 [153]"beispiel:":[153]u$
1840 [153]"sie habenclose inclose ihrem closemaschinenprogramm
1850 print"eine ja/nein-abfrage und wollen nur ei-
1860 [153]"nen buchstaben (naemlich 'j' oder 'n')
1870 print"ueber die tastatur eingeben und je nach
1880 [153]"eingabe zu verschiedenen programmteilen
1890 print"springen.andere buchstaben als j oder n
1900 [153]"sollen unterdrueckt werden.
1910 i=9:gosub5000:ifflthen1600
2000 print"[147]hier das programm:
2005 [153]"ortantanjsr $ffcf erstes zeichen einlesen
2010 print"[221][157][221] tax in xr schieben
2020 [153]"(NULL)cmd(NULL) lda #$0d (ac)='return'
2040 print"[221][157][221] jsr $ffd2 abbruch des input
2050 [153]"(NULL)cmd(NULL) cpx #$4a ist es ein 'j'?
2055 print"[221][157][221][176]_beq $04 ja: ende
2060 [153]"(NULL)(NULL)cmdcmd(NULL)(NULL) cpx #$4e ist es ein 'n'?
2070 print"[221][221][157][157][173][192]_bne $ef nein: von vorne
2090 [153]" (NULL)cmd/tanrts ruecksprung mit zeichen
2100 print" im xr
2110 i[178]10:[141]5000:[139]fl[167]1800
2200 [153]"loaddas programm liest ein wort ueber die
2220 print"tastatur ein. der erste buchstabe wird
2230 [153]"auf 'j' und 'n' geprueft. liegt einer
2240 print"dieser beiden buchstaben vor, so er-
2250 [153]"folgt der ruecksprung mit dem zeichen
2260 print"'j' (=$4a) oder 'n' (=$4e) im xr. an-
2270 [153]"dernfalls wird die eingabe wiederholt.
2280 print"dem programm wuerde nun noch die ver-
2290 [153]"zweigung in abhaengigkeit von der ein-
2295 print"gabe folgen. das sollten sie sich als
2300 [153]"uebungsaufgabe ueberlegen.
2310 i=11:gosub5000:ifflthen2000
2400 print"[147]nun eine demonstration:":printu$;u$;"[197][197][197]"
2410 print"probieren sie insbesondere,was bei fal-
2420 [153]"schen eingaben passiert ! (z.b.'return'
2430 print"oder andere buchstaben als j und n).
2440 [158] 926:[143] beispiel 2
2445 [153]"ok - jetzt kam der ruecksprung.
2450 gosub10000
2480 ifx$="j"then2400
2510 i=12:gosub5000:ifflthen2200
2600 print"[147]aufgaben:":printu$
2610 print"1. schreiben sie hinter das letzte pgm
2620 [153]" eine abfrage, welcher fall vorliegt
2630 print" mit entsprechender verzweigung.
2640 [153]"2. was passiert,wenn sie im letzten pgm
2650 print" die dritte und vierte zeile weg-
2660 [153]" lassen ?
2670 print"3. erweitern sie das pgm im ersten bei-
2680 [153]" spiel derart, dass alle leerzeichen
2690 print" unterdrueckt werden.
2710 i[178]13:[141]5000:[139]fl[167]2400
2810 [153]"loaddie loesung fur aufgabe 3 finden sie im
2820 print"ram ab 944.
2910 [153]"- seite 14 - <+> ontotototocmdcmdcmdcmdendewait <-> von vorne"
3060 [141]5020:[145]fl[137]0
3070 [128]
5000 [143] umblaettern
5010 [153]" - seite";i;"- <+> weiter <-> zurueck";
5020 [129]i[178]0[164]11:[161]x$:[130]
5030 [161]x$:[139]x$[178]""[167]5030
5040 [139]x$[178]"+"[167]fl[178]0:[142]
5050 [139]x$[178]"-"[167]fl[178]1:[142]
5060 [137]5030
10000 [153]"nochmal (j/n) ?";:[129]i[178]0[164]11:[161]x$:[130]
10010 [129]i[178]0[164]11:[161]x$:[130]
10020 [161]x$:[139]x$[178]""[167]10020
10030 [139]x$[178]"n"[167][153]" nein":[142]
10040 [139]x$[179][177]"j"[167]10020
10050 [142]